public void lineTwoStep(int x0, int y0, int x1, int y1, Color color)
{
	int pix = color.getRGB();
	int dy = y1 - y0;
	int dx = x1 - x0;
	int stepx, stepy;

	if (dy < 0) { dy = -dy;  stepy = -1; } else { stepy = 1; }
	if (dx < 0) { dx = -dx;  stepx = -1; } else { stepx = 1; }

	raster.setPixel(pix, x0, y0);
	raster.setPixel(pix, x1, y1);
	if (dx > dy) {
		int length = (dx - 1) >> 2;
		int extras = (dx - 1) & 3;
		int incr2 = (dy << 2) - (dx << 1);
		if (incr2 < 0) {
			int c = dy << 1;
			int incr1 = c << 1;
			int d =  incr1 - dx;
			for (int i = 0; i < length; i++) {
				x0 += stepx;
				x1 -= stepx;
				if (d < 0) {						// Pattern:
					raster.setPixel(pix, x0, y0);			//
					raster.setPixel(pix, x0 += stepx, y0);	//  x o o
					raster.setPixel(pix, x1, y1);			//
					raster.setPixel(pix, x1 -= stepx, y1);
					d += incr1;
				} else {
					if (d < c) {							// Pattern:
						raster.setPixel(pix, x0, y0);				//	  o
						raster.setPixel(pix, x0 += stepx, y0 += stepy);		//  x o
						raster.setPixel(pix, x1, y1);				//
						raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
					} else {
						raster.setPixel(pix, x0, y0 += stepy);			// Pattern:
						raster.setPixel(pix, x0 += stepx, y0);			//	o o 
						raster.setPixel(pix, x1, y1 -= stepy);			//  x
						raster.setPixel(pix, x1 -= stepx, y1);			//
					}
					d += incr2;
				}
			}
			if (extras > 0) {
				if (d < 0) {
					raster.setPixel(pix, x0 += stepx, y0);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1);
				} else
				if (d < c) {
					raster.setPixel(pix, x0 += stepx, y0);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1);
				} else {
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
				}
			}
		} else {
			int c = (dy - dx) << 1;
			int incr1 = c << 1;
			int d =  incr1 + dx;
			for (int i = 0; i < length; i++) {
				x0 += stepx;
				x1 -= stepx;
				if (d > 0) {
					raster.setPixel(pix, x0, y0 += stepy);			// Pattern:
					raster.setPixel(pix, x0 += stepx, y0 += stepy);		//	  o
					raster.setPixel(pix, x1, y1 -= stepy);			//	o
					raster.setPixel(pix, x1 -= stepx, y1 -= stepy);		//  x
					d += incr1;
				} else {
					if (d < c) {
						raster.setPixel(pix, x0, y0);				// Pattern:
						raster.setPixel(pix, x0 += stepx, y0 += stepy);	   //	  o
						raster.setPixel(pix, x1, y1);						 //  x o
						raster.setPixel(pix, x1 -= stepx, y1 -= stepy);	   //
					} else {
						raster.setPixel(pix, x0, y0 += stepy);			// Pattern:
						raster.setPixel(pix, x0 += stepx, y0);			//	o o
						raster.setPixel(pix, x1, y1 -= stepy);			//  x
						raster.setPixel(pix, x1 -= stepx, y1);			//
					}
					d += incr2;
				}
			}
			if (extras > 0) {
				if (d > 0) {
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
				} else
				if (d < c) {
					raster.setPixel(pix, x0 += stepx, y0);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1);
				} else {
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0);
					if (extras > 2) {
						if (d > c)
							raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
						else
							raster.setPixel(pix, x1 -= stepx, y1);
					}
				}
			}
		}
	} else {
		int length = (dy - 1) >> 2;
		int extras = (dy - 1) & 3;
		int incr2 = (dx << 2) - (dy << 1);
		if (incr2 < 0) {
			int c = dx << 1;
			int incr1 = c << 1;
			int d =  incr1 - dy;
			for (int i = 0; i < length; i++) {
				y0 += stepy;
				y1 -= stepy;
				if (d < 0) {
					raster.setPixel(pix, x0, y0);
					raster.setPixel(pix, x0, y0 += stepy);
					raster.setPixel(pix, x1, y1);
					raster.setPixel(pix, x1, y1 -= stepy);
					d += incr1;
				} else {
					if (d < c) {
						raster.setPixel(pix, x0, y0);
						raster.setPixel(pix, x0 += stepx, y0 += stepy);
						raster.setPixel(pix, x1, y1);
						raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
					} else {
						raster.setPixel(pix, x0 += stepx, y0);
						raster.setPixel(pix, x0, y0 += stepy);
						raster.setPixel(pix, x1 -= stepx, y1);
						raster.setPixel(pix, x1, y1 -= stepy);
					}
					d += incr2;
				}
			}
			if (extras > 0) {
				if (d < 0) {
					raster.setPixel(pix, x0, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1, y1 -= stepy);
				} else
				if (d < c) {
					raster.setPixel(pix, stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1, y1 -= stepy);
				} else {
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
				}
			}
		} else {
			int c = (dx - dy) << 1;
			int incr1 = c << 1;
			int d =  incr1 + dy;
			for (int i = 0; i < length; i++) {
				y0 += stepy;
				y1 -= stepy;
				if (d > 0) {
					raster.setPixel(pix, x0 += stepx, y0);
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					raster.setPixel(pix, x1 -= stepy, y1);
					raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
					d += incr1;
				} else {
					if (d < c) {
						raster.setPixel(pix, x0, y0);
						raster.setPixel(pix, x0 += stepx, y0 += stepy);
						raster.setPixel(pix, x1, y1);
						raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
					} else {
						raster.setPixel(pix, x0 += stepx, y0);
						raster.setPixel(pix, x0, y0 += stepy);
						raster.setPixel(pix, x1 -= stepx, y1);
						raster.setPixel(pix, x1, y1 -= stepy);
					}
					d += incr2;
				}
			}
			if (extras > 0) {
				if (d > 0) {
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
				} else
				if (d < c) {
					raster.setPixel(pix, x0, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 2) raster.setPixel(pix, x1, y1 -= stepy);
				} else {
					raster.setPixel(pix, x0 += stepx, y0 += stepy);
					if (extras > 1) raster.setPixel(pix, x0, y0 += stepy);
					if (extras > 2) {
						if (d > c)
							raster.setPixel(pix, x1 -= stepx, y1 -= stepy);
						else
							raster.setPixel(pix, x1, y1 -= stepy);
					}
				}
			}
		}
	}
}

